package com.zw.a.basic.a06.demo12_case;

//案例: 演示向上转型和向下转型.
/*
    向上转型 和 向下转型都是针对于 引用类型来讲的.
        向上转型:   小 -> 大
            Animal an = new Cat();          //类似于: 基本类型的隐式类型转换, 即:  double d = 10;
        向下转型:   大 -> 小
            Cat c = (Cat)an;                //类似于: 引用类型的强制类型转换, 即:  int a = (int)d;
 */
public class AnimalTest {
    public static void main(String[] args) {
        //1. 多态的形式创建, 猫类对象.
        Animal an = new Cat();          //向上转型.
        //Animal an2 = new Dog();      //向上转型.

        //2. 向下转型.
        //Cat c = (Cat)an;      //这样写不报错.

        //细节: 编译期间只检查语法问题, 所以下边这样代码在编译期间不会报错.
        Dog d = (Dog) an;       //这样写报错, ClassCastException, 类型转换异常.

    }
}
